package com.snail.config;

import cn.dev33.satoken.reactor.filter.SaReactorFilter;
import cn.dev33.satoken.router.SaRouter;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Sa-Token配置类
 */
@Configuration
public class SaTokenConfig {

    /**
     * 注册Sa-Token全局过滤器
     */
    @Bean
    public SaReactorFilter getSaReactorFilter() {
        return new SaReactorFilter()
                // 拦截地址
                .addInclude("/**")
                // 开放地址
                .addExclude(
                        "/**",
                        "/favicon.ico",
                        "/media/**",
                        "/test/**",
                        "/user/**",
                        // 放行所有 Knife4j 相关路径
                        "/doc.html",
                        "/v3/api-docs/**",
                        "/webjars/**",
                        "/swagger-resources/**",
                        "/swagger-ui/**",
                        "/swagger-ui.html",
                        "/favicon.ico"
                )
                // 鉴权方法：每次访问进入
                .setAuth(obj -> {
//                    // 登录校验 -- 拦截所有路由，除了/auth/**相关接口
//                    SaRouter.match("/**", "/auth/**", r -> StpUtil.checkLogin());
//
//                    // 权限认证 -- 不同模块校验不同权限
//                    SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
//                    SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
                })
                // 异常处理方法：每次setAuth函数出现异常时进入
                .setError(e -> {
                    return SaResult.error(e.getMessage());
                });
    }
}